// pages/cart/index.js
/**
 * 1-获取收货地址 权限 scope.address
 *  1、 如果用户 点击了 确定 scope = true       直接调用获取收货地址
 *  2、如果用户  点击了 取消 scope = false      诱导用户 打开授权设置页面 
 *  3、 如果用户 没有点击过  scope = undefined 直接调用获取收货地址
 * 2-商品全选和全不选
 * 3-商品增加和减少
 *  增加 在本地储存中 num++
 *  减少 在本地贮存中 num-- 但需要判断当前商品数量是否为1 为1 询问是否删除 商品
 * 4-计算 勾选商品的总价格和总数量
 * 5-结算功能
 *   1、判断有没有收货地址
 *   2、判断有没有选购商品
 *   3、经过以上验证 跳到支付页面 
 */
import { showModal, getSetting,chooseAddress,openSetting,showToast } from '../../utils/asyncWx.js';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 购物车列表
    carts:[],
    // 合计信息
    sum: { price:0, num:0},
    // 是否全选
    allChecked: false,
    // 收货地址
    addressInfo:{}
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.setData({
      carts:wx.getStorageSync("cart")||[],
      addressInfo:wx.getStorageSync("addressInfo")||{}    
    })
    this.sumPriceNum()
    // this.checkAllSelect()
  },
  // 获取收货地址
  async getAddress(){
    try{
      const res1 = await getSetting()
      if(res1.authSetting['scope.address']==false) {
        const res4 = await showModal({content: '您还未授权获取收货地址，若您需要收货地址信息，请确定授权。'})
        if(res4.confirm){
          await openSetting()
        }
      }
      const res2 = await chooseAddress()
      this.setData({
        addressInfo: res2
      })
      wx.setStorageSync('addressInfo', res2)
    } catch(error) {
      console.log(error)
    }
    
  },
  // 处理商品 减法
  async handlegoodMinus(e){
    var carts = this.data.carts
    var {goodsid} = e.currentTarget.dataset
    var index = carts.findIndex(v=>v.goods_id===goodsid)
    if(carts[index].num===1){
      /**
       * 只有一件商品
       * 询问是否删除商品
       */
      const result = await showModal({content:'您确定要删除商品?'})
      if(result.confirm){
        carts.splice(index,1)
        wx.setStorageSync("cart", carts);
        this.setData({
          carts
        })
        var cartNum = wx.getStorageSync('cartNum')
        cartNum--
        wx.setStorageSync('cartNum',cartNum)
      }
    }else{
      carts[index].num--
      wx.setStorageSync("cart", carts);
      this.setData({
        carts
      })
      var cartNum = wx.getStorageSync('cartNum')
      cartNum--
      wx.setStorageSync('cartNum',cartNum)
    }
    this.sumPriceNum()
  },
  // 处理商品 加法
  handlegoodAdd(e){
    var carts = this.data.carts
    var {goodsid} = e.currentTarget.dataset
    var index = carts.findIndex(v=>v.goods_id===goodsid)
    carts[index].num++
    wx.setStorageSync("cart", carts);
    this.setData({
      carts
    })
    var cartNum = wx.getStorageSync('cartNum')
    cartNum++
    wx.setStorageSync('cartNum',cartNum)
    this.sumPriceNum()
  },
  // 选择 商品 勾选框
  handleCheckBox(e) {
    const {info} = e.currentTarget.dataset
    var carts = this.data.carts
    var index = carts.findIndex(v=>v.goods_id===info.goods_id)
    carts[index].checked=!carts[index].checked
    wx.setStorageSync("cart", carts);
    this.setData({
      carts
    })
    this.sumPriceNum()
    // this.checkAllSelect()
  },
  // 触发 全选 商品事件
  handleAllCheck(e){
    var {checked}=e.currentTarget.dataset
    // 设置商品列表 选中情况
    var carts = this.data.carts
    carts.forEach(v=>v.checked=!checked)
    // 设置 全选属性
    this.setData({
      allChecked: !checked,
      carts
    })
    wx.setStorageSync("cart", carts);
    this.sumPriceNum()
  },
  // 计算 商品 总价格 和总数量
  sumPriceNum(){
    var carts = this.data.carts
    const sum = {price:0,num:0}
    let allChecked = true
    carts.forEach(v=>{
      if(v.checked){
        sum.price += v.goods_price * v.num
        sum.num += v.num
      } else {
        allChecked = false
      }
    })
    allChecked=carts.length!==0?allChecked:false
    this.setData({
      sum,allChecked
    })
  },
  /**
   * 判断 是否 全选商品
   * 
   * 此段功能合并倒 sumPriceNum函数中
   */
  checkAllSelect(){
    var carts = this.data.carts
    const allChecked = carts.length?carts.every(v=>v.checked):false
    this.setData({
      allChecked
    })
  },
  /**
   * 结算 功能
   */
  handlePay(){
    const addressInfo = this.data.addressInfo
    const sum = this.data.sum
    let title =''
    // 判断是否选购商品
    if(sum.num===0) {
      title += '请选购至少一件商品！'
    }
    // 判断是否有用户
    if(!addressInfo.userName) {
      title +='请您选择收货地址！'
    }
    if(title!==''){
      showToast({title})
    } else {
      wx.navigateTo({
        url: '/pages/pay/index',
        success: (result) => {
          console.log(result)
        }
      })        
    }

  }
})